package org.uca.dss.curso1011.grupo3.gestionreservas;

import au.com.bytecode.opencsv.CSVReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 *  Esta clase implementa la creacion de los diferentes trenes que van a formar
 *  parte de nuestro sistema.
 *
 * @author Adolfo Barroso, Levi Orta, Juan Manuel Chaves
 */
public class ListadoTrenes {

    //Atributos de la clase
    private CSVReader reader;
    private List<Tren> listaTrenes;

    /**
     * Constructor de la clase ListadoTrenes. Prepara lo necesario para tener un
     * nuevo listado de trenes.
     */
    public ListadoTrenes() {
        listaTrenes = new ArrayList<Tren>();

    }

    /**
     * Lee los datos almacenados en un fichero CVS sobre los diferentes trenes que
     * van a formar parte de nuestro sistema. El metodo lanzara una excepción si
     * el fichero no se encuentra.
     *
     * @param nombreFichero: cadena que contiene el nombre del fichero donde se guardan los datos de los trenes.
     */
    public void loadCSV(String nombreFichero) throws FileNotFoundException, IOException {
        try {
            this.reader = new CSVReader(new FileReader(nombreFichero));
        } catch (FileNotFoundException ex) {
            throw ex;
        }

        String[] Linea;
        //Se lee del fichero hasta que no se encuentra una linea en blanco
        while ((Linea = reader.readNext()) != null) {
            // Comprobamos que la linea no este vacia
            if (!Linea[0].equals("")) {
                //Se crea un nuevo tren
                Tren nuevoTren = new Tren(Linea[0].trim(), Integer.parseInt(Linea[1].trim()), Double.valueOf(Linea[2].trim()).doubleValue());
                //Se anade el nuevo tren al listado de trenes.
                add(nuevoTren);
            }
        }
    }

    /**
     * Inserta un nuevo tren al listado de trenes.
     *
     * @param nuevoTren: nuevo tren que va a crear.
     */
    public void add(Tren nuevoTren) {
        listaTrenes.add(nuevoTren);
    }

    /**
     * Devulve el numero de trenes de los que consta el listado.
     *
     * @return numero de trenes cargados por el sistema.
     */
    public int size() {
        //Se devuelve el numero de elementos de la lista
        return listaTrenes.size();
    }

    /**
     * Devuelve el tren cuyo nombre es pasado como parámetro. Si no existe ningún
     * tren con ese nombre devolvera NULL
     *
     * @param nombreTren: nombre del tren a devolver.
     * @return tren con nombre introducido por parametro de entrada. NULL si no
     * existe ningun tren con dicho nombre.
     */
    public Tren getTren(String nombreTren) {
        Tren datosTren = null;

        //Se recorren todos los trenes del listado
        for (int i = 0; i < size(); ++i) {
            //Se devuelve el tren cuyo nombre coincide con el dado.
            if (listaTrenes.get(i).getNombre().equals(nombreTren)) {
                datosTren = listaTrenes.get(i);
                return datosTren;
            }

        }
        //Si no existe ninguno se devolvera NULL
        return datosTren;
    }
}
